/********************************************************************************
* This program is free software; you can redistribute it and/or modify it under *
* the terms of the GNU General Public License as published by the Free Software *
* Foundation; either version 2 of the License, or (at your option) any later 	*
* version. This program is distributed in the hope that it will be useful, but 	*
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more *
* details. You should have received a copy of the GNU General Public License 	*
* along with this program; if not, write to the Free Software Foundation, Inc., *
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.						*
* (c) Copyright 2012 José Delgado Pérez, josedelgado@ula.ve josed43@gmail.com.	*				*
********************************************************************************/

/**
 @file servoMotor.h
 @brief Clase para el manejo del Servo Motor, tiene acceso al pin digital donde esta conectado el Servo,
 	 	brinda los métodos para enviar ordenes al servo.
 @date Diciembre, 2012.
 @author José Delgado Pérez, josedelgado@ula.ve josed43@gmail.com.
 @version 0.9

 Algunos datos: El servo motor usado es el la plataforma LASDAI-LR2 es el servo HITEC HS-55 del fabricante Pololu,
 	 	 	 	voltage de operación: 4.8V~6.0V, velocidad de operación,0.10seg/60 grados, torque de salida:1.4kg/cm.
*/

#ifndef SERVOMOTOR_H
#define SERVOMOTOR_H

#include <Arduino.h>
#include "Servo/Servo.h"

class servoMotor{

public:

	/** Constructor vacío de clase. */
	servoMotor();

	/**
	 @brief Constructor, asigna el valor del pin del Servo Motor al objeto, y inicializa el objeto Servo de Arduino.
	 @param pin Número del pin digital del Arduino al que esta conectado el Servo.
	*/
	servoMotor(int _pin);

    /**
	 @brief Asigna el valor del pin del Servo Motor al objeto, y inicializa el objeto Servo de Arduino.
	 @param pin Número del pin digital del Arduino al que esta conectado el Servo.
	*/
	void inicializarServo(int pin);

    /**
	 @brief Enviá la orden al servo para que se mueva a un ángulo especifico.
	 @param angulo Valor entero del ángulo de posicionamiento del Servo Motor.
	*/
	void escribirServomotor(int angulo);

	/**
	 @brief Obtiene el número del pin del Arduino al que esta conectado el IR.
	 @return Un entero con el número del pin.
	*/
	int getPin() const;

	/**
	 @brief Asigna el valor al parametro que guarda el número del pin digital de conexión con el Arduino.
	 @param Número del pin digital del Arduino al que esta conectado el Servo Motor.
	*/
	void setPin(int pin);

	/**
	 @brief Obtiene el objeto Servo de la clase Arduino SERVO_H.
	 @return El objeto Servo de la clase Arduino SERVO_H.
	*/
	const Servo& getServomotorUs() const;

	/**
	 @brief Asigna un objeto Servo de la clase Arduino SERVO_H.
	 @param El objeto Servo de la clase Arduino SERVO_H, que se desea asociar.
	*/
	void setServomotorUs(const Servo& servomotorUs);

	/** Destructor, desenlaza el pin de conexión al Arduino del objeto */
	~servoMotor();

private:

	/** Número del pin del Arduino al que esta conectado el Servo. */
	int _pin;

	/** Objeto Servo de la clase Arduino SERVO_H. */
	Servo servomotor;

};

#endif
